// 7-35 到底有多二 (15分)
// 一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数，则程度增加0.5倍；如果还是个偶数，则再增加1倍。例如数字-13142223336是个11位数，其中有3个2，并且是负数，也是偶数，则它的犯二程度计算为：3/11×1.5×2×100%，约为81.82%。本题就请你计算一个给定整数到底有多二。

// 输入格式：
// 输入第一行给出一个不超过50位的整数N。

// 输出格式：
// 在一行中输出N犯二的程度，保留小数点后两位。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXN 52  // 最大50位,负号一位,\0一位
int main()
{
    char numStr[MAXN];
    int twoN = 0, idx = 0, cnt = 0; // cnt计算位数,不算负号
    double twoDegree;
    fgets(numStr, MAXN, stdin);
    while (numStr[idx] != '\0' && numStr[idx] != '\n')
    {
        if (numStr[idx] != '-')  // 计算位数
        {
            cnt++;
        }
        if (numStr[idx] == '2')  // 计算2的数目
        {
            twoN++;
        }
        idx++;
    }
    if (numStr[idx] == '\n') // 消除回车
    {
        numStr[idx] = '\0';
    }
    twoDegree = (double)twoN / cnt;
    if (numStr[0] == '-')
    {
        twoDegree *= 1.5;
    }
    if (atoi(&numStr[strlen(numStr) - 1]) % 2 == 0)  // 负数和偶数分开算，并不是在负数的条件下才计算偶数
    {                                                // if ((s[len - 1] - '0') % 2 == 0) 可以不用atoi
        twoDegree *= 2;
    }
    twoDegree *= 100; // 百分数表示
    printf("%.2f%%", twoDegree);

    return 0;
}
// 输入样例：
// -13142223336

// 输出样例：
// 81.82%
